package elementsSysteme;

import java.util.ArrayList;

public class LoadBalancer8 extends LoadBalancer
{
	ServeursMiroirs8 serveurs8;

	public LoadBalancer8(ArrayList<Requete> listeRequetes,
			ServeursMiroirs serveurs, int racine, double moyenne)
	{
		super(listeRequetes, serveurs, racine, moyenne);
	}
	
	public LoadBalancer8(ArrayList<Requete> listeRequetes,
			ServeursMiroirs8 serveurs, int racine, double mu) {
		super(listeRequetes, serveurs, racine, mu);
	}
	
	int	indiceFile	= 0;

	@Override
	public void calculeDate2()
	{
		Requete requeteAvant = listeRequetes.get(0);
		ArrayList<Integer> remplissages = new ArrayList<Integer>();
		//int remplissageMoyen = 0;

		for (Requete requete : listeRequetes)
		{
			int i = listeRequetes.indexOf(requete);
			double delai = listeDelais.get(i);
			// on enleve de la file d'attente tous les elements qui partent
			// avant qu la requete n'entre
			while (!fileAttente.isEmpty()
					&& fileAttente.get(0).getDate2() <= requete.getDate1())
			{
				fileAttente.remove(0);
			}

			// on calcule la date2 de la requete
			if (fileAttente.isEmpty())
			{
				requete.setDate2(requete.getDate1() + delai);
			} else
				requete.setDate2(requeteAvant.getDate2() + delai);

			// on ajoute la requete dans la file
			fileAttente.add(requete);

			// on garde la requete sous la main pour avoir sa date2
			requeteAvant = requete;

			// on enregistre le remplissage de la file
			remplissages.add(fileAttente.size());

			// affichage de l'avancement
			//avancement(requete);
		}

		// On vide la file d'attente
		// while (!fileAttente.isEmpty())
		// {
		// fileAttente.remove(0);
		// // on enregistre le remplissage de la file
		// remplissages.add(fileAttente.size());
		// }
		fileAttente.clear();

		// on affiche le remplissage moyen
//		for (Integer remplissage : remplissages)
//		{
//			remplissageMoyen += remplissage;
//		}
//		if (remplissages.size() != 0)
//			remplissageMoyen /= remplissages.size();
//		System.out.println("\nremplissage moyen du lb3 = " + remplissageMoyen);

	}

	@Override	
	
	public int distribueRequetes(ArrayList<Integer> occupationFiles)
	{
		return ++indiceFile % occupationFiles.size();
	}
	

}

